home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / RCS / semop.man,v < prev    next >
Text File  |  1990-05-02  |  7KB  |  382 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @@;
  7.  
  8.  
  9. 1.2
  10. date     90.05.01.22.57.14;  author shirriff;  state Exp;
  11. branches ;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     90.03.15.12.32.16;  author shirriff;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19.  
  20. desc
  21. @Original Unix man page.
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @Made changes to the man page.
  28. @
  29. text
  30. @.\" @@(#)semop.2 1.16 88/03/01 SMI; from S5R3
  31. .TH SEMOP 2 "21 November 1987"
  32. .SH NAME
  33. semop \- semaphore operations
  34. .SH SYNOPSIS
  35. .ft B
  36. #include <sys/types.h>
  37. .br
  38. #include <sys/ipc.h>
  39. .br
  40. #include <sys/sem.h>
  41. .LP
  42. .ft B
  43. .nf
  44. int semop(semid, sops, nsops)
  45. int semid;
  46. struct sembuf *sops;
  47. int nsops;
  48. .ft R
  49. .fi
  50. .SH DESCRIPTION
  51. .IX  semop  ""  "\fLsemop\fR  \(em semaphore operations"
  52. .IX  semaphore "operations \(em \fLsemop\fR"
  53. .B semop(\|)
  54. is used to atomically perform an array of semaphore operations on the
  55. set of semaphores associated with the semaphore identifier specified by
  56. .IR semid .
  57. .I sops
  58. is a pointer to the array of semaphore-operation structures.
  59. .I nsops
  60. is the number of such structures in the array.
  61. The contents of each structure includes the following members:
  62. .LP
  63. .RS
  64. .ta 8n 20n
  65. .ft B
  66. .nf
  67. short    sem_num;    /\(** semaphore number \(**/
  68. short    sem_op;    /\(** semaphore operation \(**/
  69. short    sem_flg;    /\(** operation flags \(**/
  70. .fi
  71. .ft R
  72. .RE
  73. .LP
  74. Each semaphore operation specified by
  75. .B sem_op
  76. is performed on the corresponding semaphore specified by
  77. .I semid
  78. and
  79. .BR sem_num .
  80. .LP
  81. .B sem_op
  82. specifies one of three semaphore operations as follows:
  83. .LP
  84. .RS 8
  85. If
  86. .B sem_op
  87. is a negative integer, one of the following will occur:
  88. .B \%{\s-1ALTER\s0}
  89. .TP
  90. \(bu
  91. If
  92. .I semval
  93. (see
  94. .BR intro (2))
  95. is greater than or equal to the absolute value of
  96. .BR sem_op ,
  97. the absolute value of
  98. .B sem_op
  99. is subtracted from
  100. .IR semval .
  101. .TP
  102. \(bu
  103. If
  104. .I semval
  105. is less than the absolute value of
  106. .B sem_op
  107. and
  108. .RB ( sem_flg " &"
  109. .SM
  110. .BR IPC_NOWAIT\*S )
  111. is ``true'',
  112. .B semop(\|)
  113. will return immediately.
  114. .TP
  115. \(bu
  116. If
  117. .I semval
  118. is less than the absolute value of
  119. .B sem_op
  120. and
  121. .RB ( sem_flg " &"
  122. .SM
  123. .BR IPC_NOWAIT\*S )
  124. is ``false'',
  125. .B semop(\|)
  126. will increment the
  127. .I semncnt
  128. associated with the specified semaphore
  129. and suspend execution of the calling process
  130. until one of the following conditions occur.
  131. .RS 12
  132. .LP
  133. .I semval
  134. becomes greater than or equal to the absolute value of
  135. .BR sem_op .
  136. When this occurs, the value of
  137. .I semncnt
  138. associated with the specified
  139. semaphore is decremented, the absolute value of
  140. .I sem_op
  141. is subtracted from
  142. .I semval .
  143. .LP
  144. The
  145. .I semid
  146. for which the calling process is awaiting action
  147. is removed from the system (see
  148. .BR semctl (2)).
  149. When this occurs,
  150. .B errno
  151. is set equal to
  152. .SM EIDRM\*S,
  153. and a value of \-1 is returned.
  154. .LP
  155. The calling process receives a signal.
  156. When this occurs, the value of
  157. .I semncnt
  158. associated with the specified
  159. semaphore is decremented,
  160. and the calling process resumes execution in the manner prescribed in
  161. .BR signal (2).
  162. .RE
  163. .LP
  164. If
  165. .B sem_op
  166. is a positive integer, the value of
  167. .B sem_op
  168. is added to
  169. .I semval .
  170. .B \%{\s-1ALTER\s0}
  171. .if t .bp
  172. .LP
  173. If
  174. .B sem_op
  175. is zero,
  176. one of the following will occur:
  177. .B \%{\s-1READ\s0}
  178. .TP
  179. \(bu
  180. If
  181. .I semval
  182. is zero,
  183. .B semop(\|)
  184. will return immediately.
  185. .TP
  186. \(bu
  187. If
  188. .I semval
  189. is not equal to zero and
  190. .RB ( sem_flg " &"
  191. .SM
  192. .BR IPC_NOWAIT\*S )
  193. is ``true'',
  194. .B semop(\|)
  195. will return immediately.
  196. .TP
  197. \(bu
  198. If
  199. .I semval
  200. is not equal to zero and
  201. .RB ( sem_flg " &"
  202. .SM
  203. .BR IPC_NOWAIT\*S )
  204. is ``false'',
  205. .B semop(\|)
  206. will increment the
  207. .I semzcnt
  208. associated with the specified semaphore
  209. and suspend execution of the calling process until
  210. one of the following occurs:
  211. .RS 12
  212. .LP
  213. .I semval
  214. becomes zero, at which time the value of
  215. .I semzcnt
  216. associated with the
  217. specified semaphore is decremented.
  218. .LP
  219. The
  220. .I semid
  221. for which the calling process is awaiting action
  222. is removed from the system.
  223. When this occurs,
  224. .B errno
  225. is set equal to
  226. .SM EIDRM\*S,
  227. and a value of \-1 is returned.
  228. .LP
  229. The calling process receives a signal that is to be caught.
  230. When this occurs, the value of
  231. .I semzcnt
  232. associated with the specified semaphore is decremented,
  233. and the calling process resumes execution in the manner prescribed in
  234. .BR signal (2).
  235. .RE
  236. .RE
  237. .LP
  238. Upon successful completion, the value of
  239. .I sempid
  240. for each semaphore specified in the array pointed to by
  241. .I sops
  242. is set equal to the process
  243. .SM ID
  244. of the calling process.
  245. .SH RETURN VALUE
  246. Upon successful completion, the value of
  247. .I semval
  248. at the time of the call for the
  249. last operation in the array pointed to by
  250. .I sops
  251. is returned.
  252. Otherwise, a value of \-1 is returned and
  253. .B errno
  254. is set to indicate the error.
  255. .SH ERRORS
  256. .B semop(\|)
  257. will fail if one or more of the following are true for any of the semaphore
  258. operations specified by
  259. .IR sops :
  260. .TP 20
  261. .SM EINVAL
  262. .I semid
  263. is not a valid semaphore identifier.
  264. .TP 20
  265. .SM EIDRM
  266. The set of semaphores referred to by
  267. .I msqid
  268. was removed from the system.
  269. .TP 20
  270. .SM EFBIG
  271. .B sem_num
  272. is less than zero or greater than or equal to the number of semaphores
  273. in the set associated with
  274. .IR semid .
  275. .TP 20
  276. .SM E2BIG
  277. .I nsops
  278. is greater than the system-imposed maximum.
  279. .TP 20
  280. .SM EACCES
  281. Operation permission is denied to the calling process (see
  282. .BR intro (2)).
  283. .TP 20
  284. .SM EAGAIN
  285. The operation would result in suspension of the calling process but
  286. .RB ( sem_flg " &"
  287. .SM
  288. .BR IPC_NOWAIT\*S )
  289. is ``true''.
  290. .TP 20
  291. .SM ERANGE
  292. An operation would cause a
  293. .I semval
  294. value to overflow the system-imposed limit.
  295. .TP 20
  296. .SM EFAULT
  297. .I sops
  298. points to an illegal address.
  299. .TP 20
  300. .SM EINTR
  301. The call was interrupted by the delivery of a signal.
  302. .SH SEE ALSO
  303. .BR exec (2),
  304. .BR exit (2),
  305. .BR fork (2),
  306. .BR intro (2),
  307. .BR semctl (2),
  308. .BR semget (2),
  309. .BR signal (2)
  310. .SH BUGS
  311. The SEM_UNDO function is not implemented.
  312. .LP
  313. Semaphores always exit with EINTR when a signal is received.  The signal
  314. cannot be caught inside the semaphore.
  315. @
  316.  
  317.  
  318. 1.1
  319. log
  320. @Initial revision
  321. @
  322. text
  323. @a71 11
  324. Also, if
  325. .RB ( sem_flg " &"
  326. .SM
  327. .BR SEM_UNDO\*S )
  328. is ``true'', the absolute value of
  329. .B sem_op
  330. is added to the calling process's
  331. .I semadj
  332. value (see
  333. .BR exit (2))
  334. for the specified semaphore.
  335. d113 1
  336. a113 10
  337. .I semval
  338. and, if
  339. .RB ( sem_flg " &"
  340. .SM
  341. .BR SEM_UNDO\*S )
  342. is ``true'', the absolute value of
  343. .B sem_op
  344. is added to the calling process's
  345. .I semadj
  346. value for the specified semaphore.
  347. d126 1
  348. a126 1
  349. The calling process receives a signal that is to be caught.
  350. d140 1
  351. a140 11
  352. .I semval
  353. and, if
  354. .RB ( sem_flg " &"
  355. .SM
  356. .BR SEM_UNDO\*S )
  357. is ``true'', the value of
  358. .B sem_op
  359. is subtracted from the calling process's
  360. .I semadj
  361. value for the specified
  362. semaphore.
  363. a261 13
  364. .SM ENOSPC
  365. The limit on the number of individual  processes requesting an
  366. .SM
  367. .B SEM_UNDO
  368. would be exceeded.
  369. .TP 20
  370. .SM EINVAL
  371. The number of individual semaphores for which the calling process
  372. requests a
  373. .SM
  374. .B SEM_UNDO
  375. would exceed the limit.
  376. .TP 20
  377. a264 2
  378. or
  379. .I semadj
  380. d281 5
  381. @
  382.